Spring MVC入门案例

Spring MVC入门案例

入门案例

  1. 导入SpringMVC坐标与Servlet坐标

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
    

    注意事项
    导入spring-webmvc坐标自动依赖spring相关坐标

  2. 初始化SpringMVC环境(同Spring环境)

    @Configuration
    public class SpringMvcConfig {
    }
    
  3. 创建SpringMVC控制器类(等同于Servlet功能)

    @Controller
    public class UserController {
        @RequestMapping("/save")
        public String save(){
            System.out.println("user save ...");
            return "{'info':'springmvc'}";
        }
    }
    
  4. 设定SpringMVC加载对应的bean

    @Configuration
    @ComponentScan("com.charley.controller")
    public class SpringMvcConfig {
    }
    
  5. 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC请求拦截的路径

    public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
        @Override
        // 加载springmvc对应的容器对象
        protected WebApplicationContext createServletApplicationContext() {
            AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
            ctx.register(SpringMvcConfig.class);
            return ctx;
        }
    
        @Override
        // 哪些请求归mvc处理
        protected String[] getServletMappings() {
            return new String[]{"/"};   // 表示所有的请求都归springmvc处理
        }
    
        @Override
        // 加载的是spring对应的容器对象
        protected WebApplicationContext createRootApplicationContext() {
            return null;
        }
    }
    
  6. 使用浏览器测试请求。
    注意事项:由于为设定请求执行后响应的页面信息,页面显示空白,后台输出代码正常运行。

  7. 设定请求方法的返回值为字符串类型,并返回自定义的json数据

    @Controller
    public class UserController {
        @RequestMapping("/save")
        @ResponseBody
        public String save(){
            System.out.println("user save ...");
            return "{'info':'springmvc'}";
        }
    }
    
  8. 使用浏览器测试请求,请求测试成功

案例中使用到的注解含义


入门案例开发总结

入门案例工作流程分析

启动服务器初始化过程

  1. 服务器启动,执行ServletContainersInitConfig类,初始化web容器

  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象

  3. 加载SpringMvcConfig

  4. 执行@CompoentScan加载对应的bean

  5. 加载UserController, 每个@RequestMapping的名称对应一个具体的方法

  6. 执行getServletMapping方法,定义所有的请求都通过SpringMVC

单次请求过程

Controller加载控制与业务bean加载控制

思考:因为功能不同,如何避免Spring错误的加载到SpringMVC的bean。
加载Spring控制的bean的时候,排除掉SpringMVC控制的bean

@Configuration
// 方式一
//@ComponentScan({"com.charley.service","com.charley.dao"}) //  建立把dao包写上,适配所有的数据层技术
// 方式二
@ComponentScan(value="com.charley",
        excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = Controller.class
        )
)
public class SpringConfig {
}